// 引入路由模块
const { Router } = require('express')
// 创建一个路由实例
const router = new Router()
// 引入multer模块，处理上传文件
const multer = require('multer');
// 引入path模块
const path = require('path')
// 引入文件系统模块
const fs = require('fs');

// 设置保存规则
var storage = multer.diskStorage({
    //destination：字段设置上传路径，可以为函数
    destination: function (req, file, callback) {
        // 异步创建temp文件夹，这是一个临时文件夹，具体用户确认之后就要移动该文件
        fs.mkdir(path.resolve(__dirname,'../../public/free/temp'), { recursive: true }, (err) => {
            if (err) return console.log(err);
            callback(null, path.resolve( __dirname, '../../public/free/temp'));
        });
    },

    //filename：设置文件保存的文件名
    filename: function (req, file, callback) {
        // 遇到中文时候，文件名将中文字符替换
        const reg = /[\u4e00-\u9fa5]/g;
        // 替换的字符，我想不可能含有中文且文件名一样的在同一个毫秒中有一千份且每个字都能中奖，就真的可以去买彩票了
        const replaceStr = function () {
            return Math.floor(Math.random() * 1000) + '&'
        }

        const filename = file.originalname.replace(reg, replaceStr)

        // 为了防止文件名重复，而造成服务器异常，所以特别加了一个查看当前文件是否存在的函数，如果存在就在后面加一个十万的随机数
        var changedName = (new Date().getTime()) + '-' + filename;
        fs.access(path.resolve(__dirname,'../../public/free/temp',changedName), err =>{
            if (!err){
                changedName = (new Date().getTime()) + '-' + Math.floor(Math.random() * 100000)+ '-' + filename;
            }
            return callback(null, changedName);
        })
    }
})

//     multer({
//     storage: multer.diskStorage({
//         destination: function (req, file, callback) {
//             // 异步创建temp文件夹，这是一个临时文件夹，具体用户确认之后就要移动该文件
//             fs.mkdir(path.resolve(__dirname,'../public/free/temp'), { recursive: true }, (err) => {
//                 if (err) return console.log(err);
//                 callback(null, path.resolve( __dirname, '../public/free/temp'));
//             });
//         },
//         filename: function (req, file, callback) {
//             var changedName = (new Date().getTime())+'-'+file.originalname;
//             callback(null, changedName);
//         }
//     })
// });

//设置过滤规则（可选）
var imageFilter = function(req, file, cb){
    //只接收上述四种类型的图片
    var acceptableMime = ['image/jpeg', 'image/png', 'image/jpg', 'image/gif']
    if(acceptableMime.indexOf(file.mimetype) !== -1){
        cb(null, true)
    }else{
        cb(null, false)
    }
}

//设置限制（可选）
var imageLimit = {
    fieldSize: '2MB'
}

//创建 multer 实例
var imageUploader = multer({
    storage: storage,
    fileFilter: imageFilter,
    limits: imageLimit
}).single('avatar')
// array('avatar', 1)    //定义表单字段、数量限制

// 引入url文件
const url = require('../../config/url')

//单个文件上传
router.post('/avatar', imageUploader, (req, res) => {
    const { fileUrl } = req.body
    res.json({
        code: '200',
        data:{
            type: 'single',
            originalName: req.file.originalname,
            serverPath: `${url}public/free/temp/${req.file.filename}`
        },
        msg: 'success'
    })
});

router.post('/registerFile', imageUploader, (req, res) => {
    const { fileUrl } = req.body
    res.json({
        code: '200',
        data:{
            type: 'single',
            originalName: req.file.originalname,
            serverPath: `${url}public/free/temp/${req.file.filename}`
        },
        msg: 'success'
    })
});

//多个文件上传
// router.post('/multer', upload.array('multerFile'), (req, res) => {
//     console.log(req.files);
//     let fileList = [];
//     req.files.map((elem) => {
//         fileList.push({
//             originalname: elem.originalname
//         })
//     });
//     res.json({
//         code: '200',
//         type: 'multer',
//         fileList: fileList
//     });
// });

module.exports = router;
